package cl.zeke.cursos.jsf2spring3jpa2.negocio.services;

import cl.zeke.cursos.jsf2spring3jpa2.dao.Ejercicio7PersonaDao;
import cl.zeke.cursos.jsf2spring3jpa2.dao.Ejercicio7TipoMascotaDao;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Persona;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.TipoMascota;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Ejercicio7Service {
    
    @PersistenceContext
    private EntityManager em;

    @Autowired
    private Ejercicio7TipoMascotaDao ejercicio7TipoMascotaDao;
    
    @Autowired
    private Ejercicio7PersonaDao ejercicio7PersonaDao;
    
    @Transactional(readOnly=true)
    public List<TipoMascota> traerTipoMascotaTodos() {
        return ejercicio7TipoMascotaDao.traerTodas();
    }

    @Transactional(readOnly=true)
    public List<Persona> traerTodasPersonasConMascotas() {
        return ejercicio7PersonaDao.traerTodasConMascotas(); 
    }

    @Transactional(readOnly=false)
    public void guardarPersona(Persona persona) {
        em.merge(persona);
    }

    @Transactional(readOnly=false)
    public void eliminarPersona(Persona persona) {
        persona = em.find(Persona.class, persona.getRut());
        em.remove(persona);
    }
    
}
